Data routing systems and methods

ABSTRACT

A data routing system for collecting data from at least one data origin and distributing data to at least one data destination. The data routing system comprises a data input module and a data output module. The data input module operatively connected to the at least one data origin. The data input module is configured to collect data from the at least one data origin. The data output module operatively connected to the data input module and to the at least one data destination. The data collection component is configured to distribute the data collected by the data input module to the at least one data destination.

RELATED APPLICATIONS

This application claims priority of U.S. Provisional Patent ApplicationSer. No. 60/506,104, filed Sep. 25, 2003, the contents of which areincorporated herein by reference.

FIELD OF INVENTION

The present invention relates to computer systems for collecting datafrom one or more disparate data sources and distributing the collecteddata to one or more disparate data destinations.

BACKGROUND OF INVENTION

The present invention is used in the context of collecting anddistributing data. The present application uses the term “routing” torefer to the process of both collecting data from data origins anddistributing data to data destinations. The terms “data” and “dataitems” are used herein to refer to numeric, binary, or string datagenerated in an analog or digital format. Data is typically generated bymachines, devices, or the like forming part of a larger workingenvironment. The term “machine” as used herein refers to a physicalasset used to perform a predetermined task. The term “device” istypically applied to a machine with a relatively small footprint.

The data origin or origins thus may be formed by any machine or device(mobile or not) that stores data and which is either directly controlledby humans through a user interface or automatically controlled via acomputer based system. However, the present invention is of particularsignificance in the context of a working environment defined by a motioncontrol system, and that application of the present invention will bedescribed in detail below. The present invention may have broaderapplication to other working environments, however, and the scope of thepresent invention should be determined by the claims appended hereto andnot the following detailed description.

A motion control system typically comprises a plurality of motioncontrol machines or devices each programmed to perform an individualtask. The motion control system is configured to coordinate theindividual tasks so that the motion control system itself performs acombined task.

Each motion control machine or device comprises a controller thatgenerates and/or stores data indicative of the state of the machine ordevice at a particular point in time. Typically, some or all of thisdata changes because the state of the machine changes as the machineperforms its individual task.

The data generated and/or stored by the motion control machines and/ordevices of a motion control system can be used to optimize theperformance of one or more of the individual machines as well as theentire motion control system. The data destinations where the data issent can thus take any one or more of a number of forms, including adatabase system, a plant floor process management system, software usedto optimize overall production flow, other software systems, and/oranother data routing system as described herein.

The collection and distribution of the data associated with individualmotion control machines is, however, complicated by several factors. Thesheer volume of data can overwhelm the ability of the data destinationto store and/or process the data collected. In addition, the dataorigins and data destination may employ different, unique, orproprietary hardware and software systems that utilize different dataacquisition commands, data formats, and data transmission protocols.

The need thus exists for data routing systems and methods that simplifythe collection of data from diverse data origins and the subsequentdistribution of data to diverse data destinations.

SUMMARY OF INVENTION

The present invention may be embodied as a data routing system or methodfor collecting data from at least one data origin and distributing datato at least one data destination. The data routing system comprises adata input module and a data output module. The data input moduleoperatively connected to the at least one data origin. The data inputmodule is configured to collect data from the at least one data origin.The data output module operatively connected to the data input moduleand to the at least one data destination. The data collection componentis configured to distribute the data collected by the data input moduleto the at least one data destination.

DETAILED DESCRIPTION OF THE DRAWINGS

FIG. 1 is a somewhat schematic block diagram of a data routing system ofa first embodiment of the present invention;

FIG. 2 is a somewhat schematic block diagram of a data routing system ofa second embodiment of the present invention, where the data routingsystem has been optimized for use with a motion control system;

FIGS. 3-8 are scenario maps depicting the interaction of one or morecomponents of the data routing system of FIG. 2 in different operationalscenarios;

FIGS. 9-19 are examples of user interface configurations that may beused by the example data routing system of FIG. 2;

FIGS. 20 and 21 are highly schematic block diagrams depicting alternaterelationships of data inputs, data outputs, and decision logic that maybe used by the example data routing systems of FIGS. 1 and 2.

DETAILED DESCRIPTION OF THE INVENTION

Referring initially to FIG. 1 of the drawing, depicted therein is a datarouting system 20 constructed in accordance with, and embodying, theprinciples of the present invention. The data routing system 20 is usedto route data or data items collected from data origins 22 to one ormore data destinations 24.

As described above, the terms “data” and “data items” will be usedherein to refer to numeric, binary, or string data values collected inan analog or digital format from a data origin 22. Examples of datatypes that represent data or data items as defined herein includeADDRESS, ARRAY, BIT, BYTE, WORD, DWORD, LONG, REAL, DOUBLE, FLOAT,BINARY BLOB, STRUCTURE, STRING, and ASCII STRING.

The data origins 22 are machines, devices, or the like forming part of alarger working environment. The working environment is not a part of thepresent invention and thus will not be described herein beyond what isnecessary for a complete understanding of the invention. The terms“machine” as used herein refers to a physical asset used to perform apredetermined task. The term “device” is typically applied to a machinewith a relatively small footprint.

Examples of machines as defined herein include a CNC mill used to shapemetal, a pick-n-place machine used to position parts on a circuit board,a robotic machine used to perform surgery, a medical data input device(i.e. blood glucose meter, asthma meter, etc), a gaming device, arobotic toy, an animatronics figure, a robotic machine used to delivergoods to a warehouse or to people, an automobile, a truck or farmvehicle, a boat or ship, an airplane, a jet, a helicopter, a spacecraft,and/or a hardware or software-based control system within a personalcomputer or even just a personal computer or hand-held computer itself.The data origin or origins thus may be formed by any machine or device(mobile or not) that stores data and which is either directly controlledby humans through a user interface or automatically controlled via acomputer based system.

As shown in FIG. 1, the data collected by the data routing system 20 isdelivered to one or more data destinations 24. The data destinations 24can take on many forms and serve many functions, but a primary functionof the data destinations 24 is to use the data collected from themachines in the working environment to optimize operation of theindividual machines and the overall working environment.

The example data routing system 20 is a software system that comprises adata input module group 30, an optional data cache module group 32, anda data output module group 34. The term “module” as used herein refersto a binary block of computer logic that contains functions, objects,components, ActiveX components, .NET source, HTML, XML and/or othercomputer code that can be executed in real-time or in script form.Several examples of a module include an executable EXE, a dynamic linklibrary DLL, an OLE component or set of components housed within a DLLor EXE, an ActiveX Control, an HTML or XML based Control, a VB scriptsource file, a Java Serverlet, Java Control, Java Object, NET Package,etc.

The data input module group 30, data cache module group 32, and dataoutput module group 34 typically run on a processor forming part of acomputer system, but may be configured to operate across severaldiscrete processors forming part of one or more computer systems.

The data routing system 20 operates basically as follows. The data inputmodule group 30 communicates with one or more data origins 22 to obtaindata indicative of a state or condition of the machine or device formingeach of the data origins 22. If used, the data cache module group 32temporarily or persistently stores the data collected by the data inputmodule group 30. The data output module group 34 determines theconditions under which data collected by the data input module group 30stored in the data cache module group 32 is sent to one or more of thedata destinations 24. The data output module group 34 optionally alsodetermines the format in which data is sent to the data destination 24and/or the method of transporting the data to the data destination 24.

The example data input module group 30 comprises a data collectioncomponent 40 and one or more data source components 42. The term“component” as used herein refers to a logical organization of computercommands designed to perform an operation or set of operations. Examplesof components include OLE components, ActiveX controls, HTML or XMLbased controls, HTML or XML based objects, .NET objects, C++ objects, Cfunction set, Visual Basic objects, and the like. A component mayoperate on a single processor or may be distributed across a pluralityof processors.

The data collection component 40 associates all of the data collectedwith the data origins 22 from which the data was collected. The datacollection component 40 may be connected directly to one or more of thedata origins 22 or may be connected to one or more of the data origins22 through the data source components 42 as shown. If the datacollection component 40 is connected directly to a data origin 22, thedata collection component 40 and the data origin 22 must bepre-configured to work with each other, and the data collectioncomponent 40 is considered data origin independent, whereas the datasource component 42 is considered data origin dependent. However, if thedata collection component 40 communicates directly with a data origin22, it then becomes data origin dependent.

Preferably, however, one or more data source components 42 are providedto allow the data collection component 40 to operate in a data originindependent manner. In this case, the example data source components 42are each associated with one or more of the data origins 22. The datasource components 42 collect data from a particular data origin 22 orclass of data origins 22 and pass this data to the data collectioncomponent 40 in a predetermined format. The data source components 42may run entirely on the same processor or processors as the data routingsystem 20, entirely on a processor or processors associated with thedata origin 22, or on processors associated with both the data routingsystem 20 and the data origin 22. Although optional, the use of the datasource components 42 is preferred to isolate the data collectioncomponent 40 from the operational details of each of the data origins22.

The data input module group 30 may collect data from the data origins 22by one or more of a number of methods. For example, the data sourcecomponents 42 and/or data collection component 40 may read registervalues on the machine or device, read shared memory provided by themachine or device, send commands to the machine or device for which adata response is given containing the data requested, read variablesprovided by the machine or device, read and write to variables in asequence necessary to produce data values, query data using aproprietary or standard data protocol, call a function provided by themachine or device, build and send a command based on a protocol used tocommunicate with the machine or device for which a data response isprovided by the machine or device from which the data is extracted,and/or the like.

The optional data cache module group 32 comprises a data store component50 and at least one data cache 52. The data collection component 40passes data to the data store component 50; the data store component 50stores this data in one or more of the data caches 52. The data caches52 may be temporary or volatile memory devices such as RAM or may bepermanent or persistent memory such as a hard drive or database system.The data store component 50 further retrieves data from the appropriatedata cache 52 as necessary. If the data cache module 32 is not used,data collected by the data collection component 40 is passed directly tothe data output module group 34 in real time.

The data output module 34 comprises a data output component 60. Asmentioned, the data output component 60 may receive data directly fromthe data collection component 40. However, if the data cache module 32is used, the data output component 60 may direct the data storecomponent 50 to read data stored in one or more of the data caches 52and transfer the stored data to the data output component 60.

The data output module group 34 further comprises one or more datatransport components 62. Each of the data transport components 62defines or is associated with a method or system of transporting datafrom the data output component 60 to one or more of the datadestinations 24. The data output component 60 selects an appropriate oneof the data transport components 62 for each data element based on thedata destination 24 to which the data element is to be sent.

Optionally, the data output module group 34 further comprises a dataformatter component 64. The data formatter component 64 contains logic,templates, or the like for arranging data elements in a formatappropriate for one or more of the data destinations 24. The dataformatter component 64 allows the data destinations 24 to be implementedin a machine or device independent manner by obviating the need for thedata destinations 24 to process data elements in the format generated bythe data origins 22.

The data output module group 34 further optionally comprises aninference engine component 66. If used, the inference engine component66 helps the data output component 60 to determine the data destinationor destinations 24 where each data element is set. The inference enginecomponent 66 may further assist the data output component 60 to make thedetermination of which data is to be output (if any) and/or which datatransport component 62 to use and/or whether the data formattercomponent 64 is to be used.

The data routing system 20 of the present invention thus collects datafrom one or more data origins 22 and routes this data to one or moredata destinations 24. The use of the data routing system 20 allows thedata destination or destinations 24 to operate independent of theimplementation details of the data origin or origins 22. In addition,the data routing system 20 can be configured to be independent of thedata destination through the use of the data transport components 62,and data formatter components 64.

Turning now to FIGS. 2-21 of the drawing, depicted therein is a datarouting system 120 of the present invention. The example data routingsystem 120 operates in the same basic manner as the data routing system20 described above but is optimized to operate in a working environmentdefined by a motion control system.

FIG. 2 illustrates that the data routing system 120 is a collection ofmodules or components used to collect machine data from the data origins122 and then send some or all of the data collected to the datadestinations 124. The data destinations 124 may be either a local datadestination (for later replication to a remote data destination) or aremote site (either a remote data routing system or third party datadestination).

The example motion system 122 as defined in U.S. Pat. No. 5,691,897, butother motion systems may be used instead or in addition. As will bedescribed in further detail below, the motion system 122 defines or isassociated with one or more application programming interfaces. Themotion system 122 is not per se part of the present invention and willnot be described herein beyond what is necessary for a completeunderstanding of the present invention.

The data destinations 124 may use the data delivered by the data routingsystem 20 for a variety of purposes. A primary function of the datadestinations 124 is to optimize and/or monitor the operation of themachines and/or devices forming the motion control system that themotion services 122 or other software used by the data sources 142communicate with. The data destinations 124 can thus take any one ormore of a number of forms, including a database system, a plant floorprocess management system, software used to optimize overall productionflow, or other software systems, and/or another data routing system asdescribed herein.

The example data routing system 120 is connected to the data destination124 through a network 126. The network 126 is a combination of hardwareand software architectures that forms a link between two or morecomputer systems. Examples of network architectures include a packetbased network, a streaming based network, broadcast based network, orpeer-to-peer based network. Examples of networks that may be used as thenetwork 126 include a TCP/IP network, the Internet, an Intranet, awireless network using WiFi, a wireless network using radio waves and/orother light based signals, and the like.

The software components making up the example data routing system 120may be organized into three module groups: a data input. module group130, a data cache module group 132, and a data output module group 134.The data input module group 130, data cache module group 132, and dataoutput module group 134 typically run on a processor forming part of acomputer system, but may be configured to operate across severaldiscrete processors forming part of one or more computer systemsconnected by a computer network.

The data input module group 130 comprises a data collection component140 and a plurality of data source components 142 a and 142 b. The datacache module group 132 comprises a data store component 150 and one ormore data cache components 152. The data output module group 134comprises a data output component 160, one or more data transportcomponents 162, a data formatter component 164, and an inference enginecomponent 166.

The data collection component 140 is responsible for collecting datafrom the machine asset and routing all data collected to the data cachemodule group 132. The data collection component 140 is responsible formanaging one or more data source components 142 for which data iscollected and route the data collected to the data cache module group132.

The data source components 142 a and 142 b communicate with the motionsystem 122. Each data source communicates with the motion system usingwhatever means are available including to the use of applicationprogramming interfaces (API) 170 a, 170 b, and 170 c associated with themotion system 122, using (API) provided by a motion system vendor, orusing network or other communication protocols. The example data sourcecomponent 142 a is configured to receive data from the API's 170 a and170 b, while the example data source component 142 b is configured toreceive data from the API 170 c.

The example data collection component 40 manages one or more data sourcecomponents 142 and is responsible for routing the data collected to thedata store component 150 of the data cache module 132. Optionally, eachdata collection component 140 may communicate directly to the motionsystem 122 without the need for an intermediary data source component142. However, the use of the data source component 142 allows for codereuse as the data collection component 140 may then implement all commonfunctionality, thus making each data source component 142 extremely thinand easy to build and maintain. In addition, the use of each data sourcecomponents 142 allows the data collection component 150 itself to beindependent of each data origin with which each data source component142 communicates to collect data.

Each data source component 142 is responsible for mapping the datacollected from the data source (i.e. XMC API, XMC CNC API, OPC Server,or proprietary data source) into the format expected by the datacollection component 140 and ultimately the data store component 150.The main goal of the data source components 142 is to provide aconsistent interface to the data origin 122, thereby freeing the clientfrom the details of the data origin 122 and allowing all data sourcecomponents 142 to act and operate in the same manner from theperspective of the data collection component 140.

The data cache module group 132 caches the data received so that it maylater be analyzed or otherwise processed. In particular, the data storecomponent 150 manages one or more data caches 152 and is responsible forstoring all data received and giving access to all data stored.Optionally, each data store component 150 could cache all data receiveddirectly without the need for an intermediary data cache 152. However,the use of the data cache or caches 152 allows for code reuse and alsoallows the data store component 150 to remain independent of any cachingtechnologies used by each data cache component 152. The data storecomponent 150 may then implement all common functionality, thus makingeach data cache module 132 also extremely thin and easy to build andmaintain.

The terms “primary data cache” and “secondary data cache” may be used torefer to one or more of the data caches 152 depending upon whethercertain features of the data cache module 132 are implemented and/orused as will be discussed in detail below. The suffix “a” is used inFIG. 2B to designate a primary data cache, and the suffix “b” is used todesignate a secondary data cache.

Each data cache 152 stores data in a data target 172 such as a databaseon a hard drive, RAM memory, or another persistent or volatile storagemedium. The main purpose of the data caches 152 is to provide aconsistent interface to the data storage medium used so that the caches152 appear to be the same to the user, thus freeing the client of anydetails handling various caching mechanisms.

The data output module group 134 is responsible for sending the datacollected by the data input module group 30 and/or stored by the datacache module group 32 to the data destination 122. The data outputcomponent 160 manages the other components forming the data outputmodule 34, namely, the data transport components 162, the data formattercomponent 164, and the inference engine component 166.

More specifically, the data output component 160 is responsible forsending data to one or more data destinations 124. As generallydescribed above, the data destination may be an enterprise datamanagement system, an artificial intelligence system, a plant floorprocess management system, software used to optimize overall productionflow, another data routing system such as the systems 20 and 120described herein, and/or other software systems used to optimize and/ormonitor how the overall factory operates based on how each machinemaking up the factory runs.

The inference engine component 166 is responsible for mapping the dataelements received from the data input module group 130 or data cachemodule group 132 through the data output component 160 to the datadestinations 124 to which the data elements are to be sent. The datatransport component 162 defines which data elements are to be sent towhich data destination 124. When performing this mapping, the inferenceengine component 166 also optionally provides a set of rules and/orother criteria that are used to determine whether or not each outputdefined by the data transport component 162 should ‘fire’. For example,the inference engine component 166 may use one or more of the followinglogic systems: artificial intelligence systems, fuzzy logic algorithms,neural network pattern matching, genetic algorithms, expert systemlogic, and/or other computer based decision-making and/or patternmatching based systems, to determine when a given set of one or moredata elements should be sent out. In the simplest case, an identitytransform may be used which causes all data inputs received to be sentout as matching data outputs.

The data formatter component 164 is used to format all or portions ofthe data set to be transported to the data destinations 124. For examplethe data formatter component 164 may be used to format data output bythe inference engine component 166 into a certain XML schema or otherproprietary data format.

The data transport component 162 is responsible for sending the data tothe ultimate data destination 124, including an enterprise database, anenterprise software system, or even another data routing system such asthe data routing system 120.

Referring still to FIG. 2, also depicted therein is a data manager 180that allows the user to manage operation of the data routing system 120.The data manager 180 controls access to property pages exposed orgenerated by user-interface components associated with the components140, 150, 160, 162, 164, and 166. Property pages may also be exposed orgenerated by user interface components associated with the components142 and 152. In particular, the example data routing system 120comprises data collector property pages 182, data store property pages184, data output property pages 190, data transport property pages 192,data formatter property pages 194, and inference engine property pages196. As will be described in further detail below, the property pages182,184,190, 192, 194, and 196 allow the user to initialize, configure,and control the components 140, 150,160, 162,164, and 166, respectively.

In the following discussion and in the drawings, the property pages 182,184, 190, 192, 194, and 196 also refer to the user-interface componentsassociated with these property pages. The property pages 182, 184, 190,192, 194, and 196 and other interface elements are separated from thecomponents 140, 150, 160, 162, 164, and 166 in the system 120 tooptimize the overall system flexibility and facilitate evolution towardnew and future user interface technologies such as HTML based web userinterface, SOAP/XML based interfaces, Microsoft .NET based interfaces,etc. Optionally, however, the components 140, 150, 160, 162, 164, and166 could directly expose property pages and other user-interfaceelements.

Referring now to FIGS. 3-8, the interactions of the components andproperty pages forming the data input module group 130, data cachemodule group 132, and data output module group 134 will now be describedin further detail in the various scenarios required to implement thefunctions of the example data routing system 120.

Before using the data routing system 120, the system must first beinitialized. During initialization, all components are started andconfigured with their initial settings. Initializing the system involvesconfiguring the data routing system 120 so that it knows what data tocollect, where to collect it from, how to process the data collected andwhere to send the processed data. Once initialized, the system is readyto begin collecting, storing and processing machine and/or device data.

The initialization process includes to levels. First, the overall datarouting system 120 must be configured by connecting one or more datacollection components 140 data and one or more data output components160 to the data store component 150. Once connected, the componentsmaking up each of the data input module 130, data output module 134, anddata cache module 132 groups must next be configured.

The process of initializing the data routing system 120 will now bedescribed with reference to FIG. 3 Initially, the data manager 180 isrun to configure the overall system 120.

The data manager 180 of the data routing system 120 next uses the datastore property pages 184 paired with the data store component 150. Thedata store property pages 184 query the data store component 150 for allentries in the data output module group 134 category (or optionallyqueries for each entry directly using the OLE Component Categories) anddisplays each entry visually in the property page 184.

Next, after the user selects which data output module or systems 134 toactivate, the list of active data output components 160 associated withthe selected data output module or systems 134 is sent back to the datastore component 150 so that it may use the active components. The datastore component 150 could optionally query a separate ‘configuration’component used to select the active data output modules 134 to use laterwhen processing data to be output. Additionally, the activation of eachactive component 160 may optionally be activated programmaticallyinstead of by the user.

During its initialization, the data store component 150 creates aninstance of each activated data output component 160 so that the datastore component 150 can send data update events to each upon receivingnew cache data.

Similar to the configuration of the data output module group 134, thedata store property pages 184 query the data input module group 130 fora list of supported data collection components 140. Optionally, the datastore component 150 may query the data collection components 140 of thedata input module group 130 and display each these data collectioncomponents 140 visually so that the user can activate all components 140that are appropriate for collecting data.

Once selected visually by the user, the active list of one or more datacollection components 140 is sent to the data store component 150.Optionally, the data store component 150 could query a separate‘configuration’ component used to select the active data output modules134 to use later when processing data to be output. Additionally, theactivation of each component may optionally be activatedprogrammatically instead of by the user.

During initialization, the data store component 150 creates an instanceof each active data collection component 140.

Once the main components data store component 150, data collectioncomponent 140, and data output component 160 of the data output module134 are configured, the user (or configuration program) must configurethe components used by each of the systems 140, 150, and 160. The mainconfiguration task for the data collection component 140 is that ofselecting the data source components 142 (and the data items supplied byeach) from which data is to be collected. The process of configuring thecomponents used by the systems 140, 150, and 160 will now be describedwith reference to FIG. 4.

The following steps take place when configuring the data collectioncomponent 140 and related components.

First, the data manager 180 is used to configure the data collectioncomponent 140.

Second, the data collector property pages 182 are used to configure thedata collection component 140. Optionally, all configuration may be doneprogrammatically by another software module.

Each of the data collector property pages 182 queries the Data SourceOLE Category of components to see what data source components 142 areavailable. Optionally, the data collection component 140 may be queriedfor the list of all data source components 142 available.

A visual list of available data source components 142 is nextconstructed, thus allowing the user to select which data sourcecomponent or components 142 to use when collecting data. Optionally, thedata collection component 140 could directly talk to the data sourcecomponents 142; however such direct communication would reduce codereuse as the data collection component 140 allows each data sourcecomponent 142 to be very thin, making these components 142 easy to buildand maintain.

Finally, after the user selects the data source components 142 to use, alist of active data source components 142 is passed to the datacollection component 140, which then creates an instance of eachselected component.

Optionally, each data source component 142 may use an associatedproperty page (not shown) that allows the user to visually (or softwareto programmatically) configure and select the data inputs from whichdata is to be collected by each data source component 142. Each datacollector component 140 may also define a set of data inputs that theuser may configure and select; however this it not optimal as the datasource components 142 allow each data collector component 140 to remainindependent of how each data origin actually works; i.e. the data itemsthey provide and how the data for each data item is actually collected.

Referring now to FIG. 5, the following steps take place when configuringthe data cache module group 132, which includes the data store component150 thereof. Configuring the data store component 150 requires theselecting of the data cache 152 to use. When caching data there arethree main methods that may be employed: (1) cache all data to memoryonly; (2) cache all data to a persistent storage such as a database, or(3) a mixture where data is initially cached to memory and then‘rolled-over’ into the persistent store at certain intervals or after aspecified amount of data has been collected. All three models areutilized by the data cache module group 132 of the data routing system120, where only one method is necessary to build a picture of theoverall state of the data origin at a given moment in time.

In a first step shown in FIG. 5, the data manager 180 of the datarouting system 120 is used to configure the data store component 150 andassociated components using the embedded data store property page 184.As described above, the data store component 150 can be configured toimplement all user aspects that it needed to edit and otherwise allowthe user interact with the data and configuration managed by thecomponent. However, separating the user interface from the component ina parallel component has several advantages that allow for easilyadopting future user-interface based technologies such as HTML, Windows.NET, and thin client. For these reasons the user interface hasoptionally been separated from the main logic making up the data storecomponent 150. As generally described above, this same designorganization is used throughout the entire system 120 by all componentshaving an associated property page.

The data store property page 184 component queries the data storecomponent 150 for the list of data cache components 152 that areavailable and displays the list visually. The list of availablecomponents 152 may optionally be provided programmatically by a separatecomponent used for configuration. As an additional option, the datastore property page 184 may directly query the Cache Category ofcomponents in the OLE Component Category.

From the data store property page 184, the user visually selects thespecific data cache components 152 to use and the specific cachingstrategy to employ (single caching or roll-over where data from onecache is rolled over to another cache based on certain criteria such asan interval of time, or a data cache data threshold being met). Theselected data cache components 152 and strategy selected by the user aretransferred to the data store component 150 which then stores thesettings.

Each data output component 160 and associated components act as a dataoutput ‘pipeline’ where data follows a set of steps that determines whatdata will be output, what format that data will be output in, and wherethe data will be sent. Referring now to FIG. 6 of the drawing, depictedtherein are the steps that take place when configuring the data outputcomponent 160 and its related components.

First, the data manager 180 is used to configure the various aspects ofthe data output component 160 and its associated components.

When configuring the data output component 160, the data output propertypage 190 parallel component acquires the list of inference enginecomponents 166, data formatter components 164, and data transportcomponents 162 that are available. Once the list of data transport, dataformatter, and inference engine components 162, 164, and 166 isacquired, a visual display of the list is created on the data outputproperty page 190 so that the user can select one or more of thecomponents 162, 164, and 166 from the list as appropriate for theirapplication.

To obtain this list of components, the data output property page 190 mayeither query the data output component 160 or directly query the OLECategory for each of the data transport component 162, data formattercomponent 164, and inference engine component 166. If the data outputcomponent 160 is queried for the list of available components in eachcategory, the data output component 160 in turn may then internallyquery a pre-configured list or the OLE components falling into eachrespective OLE Category for the data transport component 162, dataformatter component 164, and inference engine component 166.

After the user selects one or more data transport components 162, one ormore data formatter components 164, and one or more inference enginecomponents 166, the list of components to activate is sent to the dataoutput component 160, which stores the component information as itsactive components and then creates an instance of each component.

Next, each data transport component 162 is queried for its list ofsupported outputs. The list of supported data outputs is then passed tothe inference engine component or components 166 selected.

Next, the data output component 160 queries the data store component 150for its list of supported data items, usually stored in the data cachecomponents 152 and previously selected when configuring the datacollection component 140. The list of supported input data items is thenpassed to the inference engine component or components 166 selected.

When the inference engine component or components 166 have both theinputs and outputs available, the user may optionally configure rules orother criteria used to determine when each output is ‘fired’ based onthe input data received. As examples, one or more of a set of FuzzyLogic rules, a previously trained Neural Network pattern, a GeneticAlgorithm fitness, Expert System logic, or other custom logic may beused to determine when certain outputs are sent through the data outputpipeline to the data destination.

In addition, the data formatter component or components 164 may also beconfigured to output data in data formats supported by each datadestination 124. For example, a data formatter component 164 may be usedto output data items received in a certain proprietary schema. However,the data formatter component 164 would need to be configured so that itwould know how to match the data items received to the proprietaryschema. This step in the configuration process would allow the user, oranother software program, to make this configuration.

And finally, the data transport component or components 162 would needto be configured so that they could properly send data received to theend data targets that it supported. For example, a data transportcomponent 162 configured to use TCP/IP may need to have target TCP/IPaddresses configured or TCP/IP ports configured telling the component 42where to send the data.

Once initialized, the data routing system 120 is ready to startcollecting data and storing all data collected as previously configured.FIGS. 7A and 7B depict the interactions that take place when collectingdata.

First each data source component 142 either polls for data or receivespreviously configured events from its data origination. For example,when using the motion system 124 or an OPC server as the data origin,events may be received telling the data source component 142 that newdata is available.

Upon receiving a data update event, the data source component 142 firesan event to its respective parent data collection component 140.

Upon receiving its event, the data collection component 140 then firesan event to the data store component 150.

Upon receiving each data update event, the data store component 150 usesthe active caching component or components 152 to store the data.Optionally, the data cache module 132 may employ a roll-over strategy inwhich data received is passed to one or more data cache modules 132after a certain criteria is met such as in interval of time passing or adata caching threshold being met.

After caching the data, the data store component 150 fires a data updateevent to any data output component or components 160 connected to thedata store system 132.

Upon receiving the data update event, the data output component 160 mayoptionally query the data store component 150 for more data if needed togain a full description of the current state of the machines forming themotion system 122.

All data input information is then passed to the inference enginecomponent 166 for processing. Upon receiving the data, the inferenceengine component 166 runs its preconfigured rule set against the dataset received and produces the output (if any) that is eligible to besent to the data destinations 124. If the inference engine component 166employs a dynamic model of the data, its internal model may alter itselfbased on the input data received. For example, an inference enginecomponent 166 that uses a neural network may ‘learn’ from the data bychanging the neural network's weights based on the data input valuesreceived.

If data is eligible to be output, and a data formafter component 164 isused, the output data received from the inference engine component 166is then sent to the data formatter component 164. Upon receiving thedata, the data formatter component 164 transforms the data received intothe supported output data format and passes the new output data back tothe data output component 160.

The formatted data is then passed to the data transport component orcomponents 162 to be transported or sent to the data destinations 124.If a data formatter component 164 is not used, the raw data formatoutput from the inference engine component 166 is used and passeddirectly to any active data transport component 162. Upon receiving theoutput data, the active data transport component or components 162 sendthe data to their respective data destinations 124. For example, aTCP/IP transport would packetize the data into TCP/IP packets and sendthe data stream to a preconfigured TCP/IP address/port. Alternatively, awireless transport may broadcast the data out on a pre-configuredfrequency.

Referring now to FIG. 8 of the drawing, depicted therein is arelationship among the interface windows and dialogs that form theproperty pages used to configure the example data routing system 120.The data manager 180 presents to the user a main window 220 (FIG. 9)that is used to access the data property pages 182, 184, 190, 192, 194,and 196 used to configure all settings of the data collection component140, data store component 150, and data output component 160 forming upthe system 120.

The example main window 220 presented by the data manager 180 toconfigure each of the main components 140, 150, and 160 is shown in FIG.9. In particular, the main page 220 of the data manager 180 acts as acontrol panel that allows the user to configure and monitor how dataflows from each data source 122 to the eventual data destination 124.

Each of the user interface elements of the main page 220 on the datamanager 180 will now be described with reference to FIG. 7.

A “Configure” button 222 allows the user to configure the overall system120 by building up the overall data transfer pipeline. This option isonly available when running the application as an Administrator on thesystem.

A “Start” button 224 starts monitoring the data source components 142and feeds the data received through the system 220.

A “Stop” button 226 stops monitoring the data source components 142 andshuts down the entire monitoring process.

A “Monitoring” icon 230 visually displays whether or not monitoring iscurrently enabled.

A “Close” button 232 closes the monitoring application window but doesnot close the application. Since the application runs as a system trayapplication, you must exit the application by right clicking on thesystem tray icon.

A “Status” window 234 visually shows the overall configuration andstatus of the system including all nodes making up the data input module130, data store system 132, and data output module 134.

The following sections describe how to build and configure the overallsystem 120 using examples of the various property pages 182, 184, 190,192, 194, and 196.

Referring initially to FIG. 10, depicted therein is a configurationdialog window 240 that is associated with the data manager 180. Theconfiguration dialog window allows a user to build the overall datarouting system 120. The user interface elements making up theconfiguration dialog window 240 are as follows.

An “Add Data Collector . . . ” button 24 displays a dialog containing alist of all data collection components 140 available to the system. Onceselected, the selected data collection components 140 are added to thesystem 120. The data collection components 140 are connected to the datastore component 150 so that data events are sent to the data storecomponent 150 each time data items are received by each of the datacollection components 140 from their respective various data sourcecomponents 142.

An “Add Data Output . . . ” button 244 displays a dialog containing alist of all data output modules 134 available to the system. Onceselected, the data output modules 134 are added to the system. Each dataoutput module 134 manages a data pipeline that may involve inferencerules or other decision-making technology that tell when to fire eachdata output.

A “Delete” button 246 removes a module from the list of componentsmaking up the overall data routing system 120.

A “Load” button 250 loads the components of a previously saved datarouting system 120 from a persistent storage medium such as a file ordatabase.

A “Save” button 252 saves the current data routing system 120 to apersistent storage medium such as a file or database.

A “Close” button 254 closes the configuration dialog.

A “Node” control 260 contains the current modules making up the datarouting system 120, including data collection components 140, data storecomponents 150, and data output components 160.

An “About” property page 262 displays information about the currentlyselected module in the node list.

A “Settings” property page 264 displays a property page corresponding tothe currently selected node in the node list. The property page allowsthe user to configure the settings specific to the node selected.

Examples of interface elements that may be used to implement theproperty pages 182, 184, 190, 192, 194, and 196, as well as otherrelated property pages, will now be described with reference to FIGS.11-18. The “Delete”, “Load”, “Save”, and “Close” interface elementsdepicted in FIGS. 11-18 apply to the “Node” Control on the left part ofeach figure (not shown) and will not be described in detail below.

An example of the data collector property page 182 is depicted in FIG.11 of the drawing. The data collector property page 182 allows a user toconfigure the components, such as the data collection components 140and/or data source components 142, of the data input module group 130.

A “Data Sources” list box 270 contains a list of all data sourcecomponents 142 available to the system. The list of available datasource components 142 is acquired by either directly enumerating theData Source OLE Category of components or by querying the datacollection component 140 for all data source components 142 that it‘knows’ about.

A “Select” button 272 adds the currently selected item in the list ofdata source components 142 to the currently selected data output module134 in the main node list.

A “Target Scan Rate” edit field 274 allows the user to input a globalscan rate that applies to all data source components 142 that may becontrolled using a global scan rate.

A data source property page 280 is depicted in FIG. 12. The data sourceproperty page 280 allows the user to select the data items madeavailable by each data source component 142. The selected data items arethen fed into the data store component 150 and eventually on into theselected inference engine component 166. The following user-interfaceelements make up the data source property page 280.

A “Data Items” list box 282 contains a list of all data items madeavailable by each data source component 142. The user must enable thedata items that they want to monitor in their system. The list ofavailable data items is acquired by browsing a particular data sourcecomponent 142.

A “Scan Rate” edit box 284 allows the user to enter the scan rate to usefor this specific data source (which may be different from the globalscan rate). If no scan rate is entered, the default global scan rate isused when appropriate.

A data store property page 290 depicted in FIG. 13 is used to configurethe data store component 150 by selecting and configuring the data cacheor caches 152 used and the specific caching strategies for each. Thefollowing user-interface elements make up the data store property page290.

A “Data Caches” list box 292 contains a list of all data caches 152available to the system 120. The list of available data caches 152 maybe acquired either by directly enumerating the data cache OLE Categoryof components or by querying the data store component 150 for a list ofactive data caches 152.

A “Select” button 294 adds the currently selected item in the “DataCaches” list box 290 to the currently selected data store component 150in the master node list.

Referring now to FIG. 14, depicted therein is a data cache property page320 that allows the user to configure the specific caching strategy tobe used by each data cache 152. The following user interface elementsmake up the data cache property page 320.

An “Enable data roll-over” check-box 322 allows the user toenable/disable data roll-over. When enabled, data placed in a particulardata cache 152 can roll-over into another, or secondary, data cache 152upon meeting certain criteria specified by other of the user-interfaceelements forming the data cache property page 320.

An “After reaching cache data threshold of” radio button 224, ifselected, determines that roll-over occurs when a certain number ofbytes are cached in the primary data cache, assuming that data cacheroll-over is also enabled by check box 322. A caching threshold datafield 324 a allows the user to specify the data cache threshold. Afterreaching the roll-over threshold level, all data currently in theprimary data cache 152 a is copied to the secondary data cache 152 b.

An “After time interval of” radio button 326, when selected determinesthat roll-over occurs at specifically set time intervals, again assumingthat data cache roll-over is enabled by check box 322. A time intervaldata field 326 a allows the user to specify the duration of the timeinterval. Upon the expiration of each time interval all data in theprimary data cache 152 a is automatically copied over to the secondarydata cache 152 b and then removed from the primary cache 152 a.

A “Roll-over to” list-box 328 contains a list of data caches that can beused as secondary caches 152 b. The primary cache 152 a rolls data overto the secondary cache 152 b selected by pressing a “Select” button 328a.

Referring now to FIG. 15, the data output property page 190 is depictedtherein in further detail. The data output property page 190 is used toconfigure the data output module 134 by selecting the data transportcomponents 162, data formatter component 164, and inference enginecomponent 166 that are to make up the data output pipeline. Thefollowing user-interface elements make up the data output property page190.

An “Interface Engines” list-box 330 contains a list of all inferenceengine component or components 166 that are available to the system 120.A first “Select” button 330a allows one or more of the inference enginecomponents 166 to be selected. As generally described above, eachinference engine component 166 is responsible for mapping input valuesto output values and determining when each data element should actuallybe sent to the data destination 124.

A “Data Formatters” list-box 332 contains a list of all data formattercomponents 164 that are available to the system 120. A second “Select”button 332a allows one or more of the data formatter components 164 tobe selected. Each data formatter component 164 is responsible fortransforming data input into another data format that is output asoutput data.

A “Data Transports” list-box 334 contains a list of all data transportcomponents 162 that are available to the system 120. A third “Select”button 334a allows one or more of the data transport components 162 tobe selected. Each data transport component 162 is responsible forsending the data received to the ultimate data destination 124, such asan enterprise database, analysis system, another data routing system, orthe like.

The inference engine property page 196 will now be described in furtherdetail with reference to FIG. 16. The inference engine property page 196is used to configure the settings defining how the inference enginecomponent 166 actually works. The inference engine component 166 mapsinputs received to expected outputs defined by the data transportcomponent 162. When mapping inputs to outputs, the inference enginecomponent 166 optionally uses decision logic to determine whether or noteach output should fire (i.e. be sent on to one or more data transportcomponent 162) based on the inputs received. The user interface elementsmaking up the inference engine property page 196 are as follows.

An “Input Data Items” list-box 340 contains a list of all data inputsreceived from the data input module 130 via the data store component150. An “Output Data Items” list-box 342 contains a list of all dataoutputs received from the data output module 134 via the data transportcomponent 162. A “Rule Map” list-box 344 contains a list of rules thatdefine how to map the received data inputs to the outputs.

In this sample inference engine component 166, the user drags items fromthe Input Data Items list box 340 into the inputs making up the rule-mapas listed in the Rule Map list box 344. The rule-map associated witheach of the items in the Input Data Items list box 344 defines when tofire output to each defined output.

An example data formatter property page 194 is depicted in FIG. 17. Thedata formatter property page 194 allows the user to configure how thefinal data output is actually formatted. For example, the exampleproperty page 194 depicted in FIG. 17 illustrate how to map data outputsinto an XML schema. The following user interface elements make up thedata formatter property page 194.

An “XML Schema Map” 350 control contains an editable XML Schema thatallows a user to drag an output data item into different portions of theschema essentially ‘linking’ the data item to that portion of the XMLschema. When linked, the final XML data file is built by using the XMLschema and then placing data from each output data item into the slotswhere they are linked into the XML schema.

An “Output Data Items List” list-box 352 contains a list of all dataoutputs available as defined by the data output module 134 via the datatransport component or components 162.

Depicted in FIG. 18 is an example of a data transport property page 192.The data transport property page 192 allows the user to configure thespecific settings of each data transport component 162 used tocommunicate with the data destination or destinations 124. The exampleproperty page 192 depicted in FIG. 18 is an example property page for adata transport component 162 that communicates across a TCP/IP based(wire-based or wireless) network. The data transport property pageemploys the following user interface elements.

A “Target TCP/IP Address” 360 edit field allows the user to enter thetarget TCP/IP address of the machine or machines forming destinationswhere data is to be sent.

A “Target TCP/IP Port” edit field 362 allows the user to specify a setof one or more TCP/IP ports to use on the target TCP/IP address.

A “Use UDB Broadcasting” radio button 364 directs the transport tobroadcast the output data using the UDP broadcasting protocol and ignorethe target TCP/IP address as data will be sent to all machines formingdata destinations 124 on the network 126.

A “Use Peer-to-Peer Messaging” radio button 366 directs the transport touse a peer-to-peer messaging protocol such as the one used with WindowsInstant Messenger, where data is sent immediately to the target machineforming the data destination 124 and may optionally be displayed in anInstant Messenger viewing application such as Windows Messenger.

A “Use Data Streaming” radio button 368 directs the transport to use adata streaming technology where the data outputs are streamed to thetarget(s) in a manner similar to that of a streaming music or videosource. Optionally, the data outputs may also be interleaved into anexisting music, video, or other data streaming data source.

A “Use Virtual Private Networking Tunneling” radio button 370 directsthe transport to use a tunneling technology, where the data packetsmaking up the output data are embedded within another packet type,optionally encrypted and secured, and then sent to the target overanother protocol such as HTTP, or in this case the PPTP or L2TPprotocol. SOAP or XML messaging is another manner of tunneling where thedata is placed within a SOAP or XML ‘envelope’ and then sent over to theoutput target using the SOAP or other XML messaging protocol.

A “Use SMTP E-Mail Format” radio button 372 directs the transport topackage the output data sets into an e-mail format and sends it to thetarget. Further configuration may be required to actually setup aspecific e-mail address for the recipient.

A “Use SNMP Format” radio button 374 directs the transport to use theSNMP transport to communicate with the output target.

An “Enable Data Encryption” check-box 380 enables data encryption suchthat the data is encrypted before transmission. A “Use KerberosSecurity” check-box 382 enables Kerberos security. A “Use 128 bitEncryption” check-box 384 enables 128-bit encryption for the output datapackets.

An “Enable Transmission Timeout” check-box 386 enables transmissiontime-out on each communication with the target. When enabled, the senderonly waits for an amount of time specified in a data field 386 a for aresponse from the data destination 124, after which response datareceived from the target is ignored.

The example data routing system 120 is a modular system made up of a setof components as generally described above. In this case, each componentis based on a component technology, such as OLE/COM technology definedby Microsoft Corporation.

Optionally, each component uses a separate ‘parallel’ ActiveX componentto implement all user interface aspects of the main component, also asgenerally described above. Each ActiveX component may be implementedeither within the main component module or separately in its own module.Bundling each object within one module is not required as they may belocated at any location (i.e. across a network, and so forth), but doingso may optimize all communication between modules. How and wherecomponents are implemented is more of a logistical decision because,once components are built and deployed to the field, it is difficult toupdate a single component if all components are implemented within asingle DLL or EXE module.

FIG. 19 illustrates that the components forming the data routing systemconform to a single interface identified as the IXMCDirect interface.OLE Categories are used to determine how many components fall into acertain group of components. Components used by the example data routingsystem 120 fall into the following categories:

Data Input Components—Typically, this category includes a single datacollector component, but multiple data input components may be used in alarge distributed environment.

Data Source Components—Many data source components are often used at thesame time.

Data Output Components—Many data output components are often used at thesame time, with each data output component defining at least part of adata output pipeline.

Inference Components—One or more inference engine components are used byeach data output component.

Data Formatter Components—One or more data formatter componentcomponents are typically used by each data output module.

Data Transport Components—One or more data transport components aretypically used by each data output module.

The IXMCDirect interface depicted in FIG. 19 is used for mostcommunications between components of the data routing system 120. TheIXMCDirect interface is made up of the following functions, which arespecified in standard OLE/COM IDL format.

A GetProperty method is used to query a specific property from thecomponent implementing the interface.

A SetProperty method is used to set a specific property from thecomponent implementing the interface.

An InvokeMethod method is used to invoke a specific action on thecomponent implementing the interface. An action can cause an event tooccur, carry out a certain operation, query a value, and/or set a valuewithin the component implementing the method.

More detailed descriptions of each of the methods implemented by objectsimplementing the example IXMCDirect interface are described below.

The IXMCDirect::GetProperty method is used to query the propertycorresponding to the property name ‘pszPropName’. Each component definesthe properties that it supports. The following table summarizes theGetProperty method implemented by the example IXMCDirect interface:Syntax HRESULT GetProperty( LPCTSTR pszPropName, LPXMC_PARAM_DATArgData, DWORD dwCount ); Parameters LPCTSTR pszPropName - string name ofthe property to query. LPXMC_PARAM_DATA rgData - array of XMC_PARAM_DATAtypes that specify each parameter corresponding to the property. Forexample, a certain property may be made up of a number of elements - inthis case an array of XMC_PARAM_DATA items is returned, one for eachelement making up the property. In most cases a property is made up of asingle element, thus a single element array is passed to this method.For more information on the XMC_PARAM_DATA type, see below. DWORDdwCount - number of XMC_PARAM_DATA elements in the rgData array. ReturnValue HRESULT - NOERROR on success, or error code on failure.

The IXMCDirect::SetProperty method is used to set a property in thecomponent corresponding to the ‘pszPropName’ property. For the set ofproperties supported by the component, see the specific componentdescription. The following table summarizes the SetProperty methodimplemented by the example IXMCDirect interface: Syntax HRESULTSetProperty( LPCTSTR pszPropName, LPXMC_PARAM_DATA rgData, DWORD dwCount); Parameters LPCTSTR pszPropName - string name of the property to set.LPXMC_PARAM_DATA rgData - array of XMC_PARAM_DATA types that specifyeach parameter corresponding to the property. For example, a certainproperty may be made up of a number of elements - in this case an arrayof XMC_PARAM_DATA items is returned, one for each element making up theproperty. In most cases a property is made up of a single element, thusa single element array is passed to this method. For more information onthe XMC_PARAM_DATA type, see below. DWORD dwCount - number ofXMC_PARAM_DATA elements in the rgData array. Return Value HRESULT -NOERROR on success, or error code on failure.

The IXMCDirect::InvokeMethod method is used to call a specific methodimplemented by the component. For more information on the methodssupported, see the description of the specific component. The followingtable summarizes the InvokeMethod method implemented by the exampleIXMCDirect interface: Syntax HRESULT InvokeMethod( DWORD dwMethodIdx,LPXMC_PARAM_DATA rgData, DWORD dwCount ); Parameters DWORD dwMethodIdx -number corresponding to the specific method to invoke. For moreinformation on the method indexes available, see the set of namespacesdefined for the component. LPXMC_PARAM_DATA rgData [optional] - array ofXMC_PARAM_DATA types that specify each parameter for the method called.For more information on the XMC_PARAM_DATA type, see below. NOTE: if noparameters exist for the method called, a value of NULL must be passedin. DWORD dwCount [optional] - number of XMC_PARAM_DATA elements in thergData array. NOTE: if no parameters exist for the method called, avalue of 0 (zero) must be passed in for this parameter. LPXMC_PARAM_DATArgData [optional] - namespace associated with the instance of the customextension module added. Return Value HRESULT - NOERROR on success, orerror code on failure.

This methods supported by each component making up the system 120 willnow be described. Initially, the general methods supported by themajority of the components forming the system 120 will be first bedescribed; the methods supported by each individual component will thenbe discussed.

The XMC_DE_BROWSE_GET_COUNT general method returns the number of dataitems in the browse set supported by the component and is described inthe following table. Index 8020 Data In None Data Out rgData[0] -(number) DWORD, number of browse elements.

The XMC_DE_BROWSE_GET_ITEMS general method returns the number of dataitems in the browse set supported by the component and is described inthe following table: Index 8021 Data In rgData[0] - (number) DWORD,maximum number of elements to collect. Data Out rgData[0] - (number)number of elements collected, total number of elements will equal(rgData[0] * 2 + 1). rgData[1] - (string) name of the first browseelement. rgData[2] - (number) adt of the first browse element.rgData[1 + n * 2] - (string) name of the n'th browse element. rgData[2 +n * 2] - (number) adt of the n'th browse element.

The XMC_DE_SYSTEM_CONNECT_CMPNT general method is used to connect oneserver to another so that they may interact with one another and isdescribed in the following table: Index 8000 Data In rgData[0] -(number) DWORD, type of component. The type of component is a value thatis server specific. For component type information, see the descriptionfor this method under each server's description. rgData[1] - (string)LPTSTR, component class id as an ASCII string. Data Out None.

The XMC_DE_SYSTEM_DISCONNECT_CMPNT general method is used to disconnectone server from another so that they stop interacting with one anotherand is described in the following table: Index 8001 Data In rgData[0] -(number) DWORD, type of component. The type of component is a value thatis server specific. For component type information, see the descriptionfor this method under each server's description. rgData[1] - (string)LPTSTR, component class id as an ASCII string. Data Out None.

The XMC_DE_DATA_PROCESS general method is called by a client to processdata where a data set is input, processed in some way by the server, andthen the resulting data is returned as output. The XMC_DE_DATA_PROCESSmethod is described in the following table: Index 8063 Data InrgData[0] - (number) DWORD, number of data items input. rgData[1 + n *2] - (string) LPCTSTR, name of the data item input. rgData[2 + n * 2] -(number or string), value of the data item. Data Out rgData[0] -(number) DWORD, number of data items output. rgData[1 + n * 2] -(string) LPCTSTR, name of the data item output. rgData[2 + n * 2] -(number) value of the data item.

The XMC_DE_DATA_PROCESS_CONFIGURE general method is used to configurewhat type of data is returned when processing a given data item. Forexample in the server may be configured to return the minimal amount ofdata on each read (i.e. just the data item value), or the server may berequested to return more substantial data. TheXMC_DE_DATA_PROCESS_CONFIGURE method is described in the followingtable: Index 8062 Data In rgData[0] - (number) DWORD, flag describingthe type of data to be returned when processing data. The followingflags are supported: XMC_DE_READ_DATA_FLAG_TIMESTAMP - requests that thetime stamp recorded when processing the data is returned. NOTE: bydefault, the data item value is always returned. Data Out None.

The XMC_DE_DATA_READ general method is called by a client application topoll for data from the server and is defined in the following table:Index 8061 Data In rgData[0] - (string) LPCTSTR, name of the data itemto read. Data Out rgData[0] - (number or string), data item value.rgData[1] - (OPTIONAL number) DWORD, data item time-stamp as a systemtime value. NOTE: Since the last items are optional, only those itemsspecified when configuring the data to receive are actually sent.

The XMC_DE_DATA_READ_CONFIGURE general method is used to configure whattype of data is returned when reading a given data item. For example,the server may be configured to return the minimal amount of data oneach read (i.e. just the data item value) or the server may be requestedto return more substantial data. The following table defines theXMC_DE_DATA_READ_CONFIGURE method: Index 8060 Data rgData[0] - (number)DWORD, flag describing the type of data to In be returned on each read.The following flags are supported: XMC_DE_READ_DATA_FLAG_TIMESTAMP -requests that the time stamp recorded when reading the data is returned.NOTE: by default, the data item value is always returned. Data None. Out

The XMC_DE_DATA_WRITE general method is used to write data to a serverand is described in the following table: Index 8064 Data In rgData[0] -(number) DWORD, number of data items. rgData[1 + n * 2] - (string)LPCTSTR, name of the data item. rgData[2 + n * 2] - (number or string),value of the data item. Data Out None.

The XMC_DE_EVENT_ENABLE general method enables/disables a previouslysubscribed data item in the subscription list maintained by the server.Only enabled subscriptions actually fire. The XMC_DE_EVENT_ENABLE methodis defined in the following table: Index 2892 Data rgData[0] - (number)DWORD, cookie (unique identifier) In associated with the subscription.This value is returned to the client when calling the subscriptionXMCAPI above. NOTE: using a cookie value of zero (0) will enable/disableALL items subscribed to the server. rgData[1] - (number) BOOL, TRUE toenable the subscription(s), FALSE to disable the subscription(s). Onlyenabled subscriptions actually fire events. Data None. Out

This XMC_DE_EVENT_RECEIVE_DATA general method is called by the server(and implemented by the client) when each subscribed event fires and isdescribed in the following table: Index 8045 Data rgData[0] - (number)DWORD, subscription cookie corresponding In to the subscribed data item.rgData[1] - (number or string), data item value. rgData[2] - (OPTIONALnumber) DWORD, data item time-stamp as a system time value. rgData[3] -(OPTIONAL string) LPSTR, data item ASCII text name. rgData[4] -(OPTIONAL number) DWORD, data item unique cookie. NOTE: Since the lastthree items are optional, only those items specified when configuringthe data to receive are actually sent. If, for example, one or more dataitems are NOT requested, then the items are returned in slots shifted uptoward rgData[1]. For example if only the data item name is requested inaddition to the default data items, the data returned would look likethe following: rgData[0] - (number) DWORD, subscription cookie.rgData[1] - (number or string), data item value. rgData[2] - (string)LPSTR, data item name. Data None. Out

The XMC_DE_EVENT_RECEIVE_DATA_CONFIGURE general method is used toconfigure what type of data is returned on each event that is fired. Forexample in the server may be configured to send the minimal amount ofdata on each event (i.e. subscription cookie and data item value), orthe server may be requested to return more substantial data. TheXMC_DE_EVENT_RECEIVE_DATA_CONFIGURE method is defined in the followingtable: Index 8044 Data rgData[0] - (number) DWORD, flag describing thetype of data to In be returned on each event. The following flags aresupported: XMC_DE_EVENT_DATA_FLAG_TIMESTAMP - requests that the timestamp recorded when reading the data is returned.XMC_DE_EVENT_DATA_FLAG_NAME - requests that the data items ASCII textname be returned. XMC_DE_EVENT_DATA_FLAG_DATA_COOKIE - requests that theunique data item cookie corresponding to the read made for the data itembe returned. NOTE: by default, the subscription cookie and data itemvalue are always returned. Data None. Out

The XMC_DE_EVENT_SUBSCRIBE general method subscribes to a given dataitem activating the event interface when the subscription criteria aremet for the data item. All subscribing components use the IXMCDirectinterface to receive events received from the server for which they aresubscribed. The XMC_DE_EVENT_SUBSCRIBE method is described in thefollowing table: Index 2890 Data rgData[0] - (number) DWORD, flagsdescribing the initial state of In the subscription. The following flagsare supported: XMC_DE_EVENT_FLAG_ENABLED - subscription is immediatelyenabled upon subscription. XMC_DE_EVENT_FLAG_DISABLED - subscription isdisabled upon making the subscription. The Enable function must becalled to enable the subscription. rgData[1] - (number) DWORD, number ofsubscription criteria rules. rgData[2 + (2 * n)] - (number) DWORD, eventcondition type where the following types are supported:XMC_CNC_EVENTCONDITION_DATA_CHANGE - any data changes in the data typeabove will trigger the event. XMC_CNC_EVENTCONDITION_DATA_EQUALXMC_CNC_EVENTCONDITION_DATA_LESSTHANXMC_CNC_EVENTCONDITION_DATA_GREATERTHAN XMC_CNC_EVENTCONDITION_DATA_ANDXMC_CNC_EVENTCONDITION_DATA_OR Each of the conditions above are used ina combined manner. Where the logical condition (=, <, >) are applied foreach type respectively. For example, in an array that contains thefollowing items: rgData[2] = 4 (4 condition values) rgData[3] =XMC_CNC_EVENTCONDITION_EQUAL rgData[4] = 3.0 rgData[5] =XMC_CNC_EVENTCONDITION_LESSTHAN rgData[6] = 3.0 rgData[7] =XMC_CNC_EVENTCONDITION_OR rgData[8] = 1.0 rgData[9] =XMC_CNC_EVENTCONDITION_GREATHERTHAN rgData[10] = 5.0 the array would beevaluated using the following logic: If (DATA <= 3.0 OR DATA >5.0) thenTrigger Event rgData[3 + (2 * n)] - (number) double, the value for thecondition. See above. Data rgData[0] - (number) DWORD, cookie (uniqueidentifier) Out representing the subscription.

The XMC_DE_EVENT_UNSUBSCRIBE general method removes a previouslysubscribed data item from the subscription list maintained by the Index2891 Data In rgData[0] - (number) DWORD, cookie (unique identifier)associated with the subscription. This value is returned to the clientwhen calling the subscription XMCAPI above. NOTE: using a cookie valueof zero (0) will unsubscribe ALL items subscribed to the server. DataOut None.

The XMC_DE_SYSTEM_INITIALIZEHW general method is used to initialize anyhardware systems associated with the component and is defined in thefollowing table: Index 500 Data In None. Data Out None.

The XMC_DE_SYSTEM_SHUTDOWNHW general method is used to shutdown anyhardware systems associated with the component and is defined by thefollowing table: Index 501 Data None. In Data None. Out

The following discussion will define which of the general methodsimplemented are implemented by particular components of the system 120.

The data collection component 140 implements the general methodsdescribed above as indicated in the following table: Not MethodImplemented Implemented XMC_DE_BROWSE_GET_COUNT xXMC_DE_BROWSE_GET_ITEMS x XMC_DE_DATA_PROCESS xXMC_DE_DATA_PROCESS_CONFIGURE x XMC_DE_DATA_READ xXMC_DE_DATA_READ_CONFIGURE x XMC_DE_DATA_WRITE x XMC_DE_EVENT_ENABLE xXMC_DE_EVENT_RECEIVE_DATA x XMC_DE_EVENT_RECEIVE_DATA_CONFIGURE xXMC_DE_EVENT_SUBSCRIBE x XMC_DE_EVENT_UNSUBSCRIBE xXMC_DE_SYSTEM_CONNECT_CMPNT x XMC_DE_SYSTEM_DISCONNECT_CMPNT xXMC_DE_SYSTEM_INITIALIZEHW x XMC_DE_SYSTEM_SHUTDOWNHW x

The following special notes apply to some of the general methodsimplemented by the data collection component 140.

The following component types are valid for theXMC_DE_SYSTEM_CONNECT_CMPNT method as implemented by the data collectioncomponent 140; the XMC_DE_CMPNT_TYPE_XMCDSRC, which specifies a datasource component 142.

The following component types are valid for theXMC_DE_SYSTEM_DISCONNECT_CMPNT method as implemented by the datacollection component 140; XMC_DE_CMPNT_TYPE_XMCDSRC, which specifies andata source component 142.

The data source component 142 implements the general methods describedabove as indicated in the following table: Not Im- Im- ple- ple- ment-ment- Method ed ed XMC_DE_BROWSE_GET_COUNT x XMC_DE_BROWSE_GET_ITEMS xXMC_DE_DATA_PROCESS x XMC_DE_DATA_PROCESS_CONFIGURE x XMC_DE_DATA_READ xXMC_DE_DATA_READ_CONFIGURE x XMC_DE_DATA_WRITE x XMC_DE_EVENT_ENABLE xXMC_DE_EVENT_RECEIVE_DATA x XMC_DE_EVENT_RECEIVE_DATA_CONFIGURE xXMC_DE_EVENT_SUBSCRIBE x XMC_DE_EVENT_UNSUBSCRIBE xXMC_DE_SYSTEM_CONNECT_CMPNT x XMC_DE_SYSTEM_DISCONNECT_CMPNT xXMC_DE_SYSTEM_INITIALIZEHW x XMC_DE_SYSTEM_SHUTDOWNHW x

There are no special notes for the methods implemented by the datasource components 142.

The data store component 150 implements the general methods describedabove as indicated in the following table: Not Im- Im- ple- ple- ment-ment- Method ed ed XMC_DE_BROWSE_GET_COUNT x XMC_DE_BROWSE_GET_ITEMS xXMC_DE_DATA_PROCESS x XMC_DE_DATA_PROCESS_CONFIGURE x XMC_DE_DATA_READ xXMC_DE_DATA_READ_CONFIGURE x XMC_DE_DATA_WRITE x XMC_DE_EVENT_ENABLE xXMC_DE_EVENT_RECEIVE_DATA x XMC_DE_EVENT_RECEIVE_DATA_CONFIGURE xXMC_DE_EVENT_SUBSCRIBE x XMC_DE_EVENT_UNSUBSCRIBE xXMC_DE_SYSTEM_CONNECT_CMPNT x XMC_DE_SYSTEM_DISCONNECT_CMPNT xXMC_DE_SYSTEM_INITIALIZEHW x XMC_DE_SYSTEM_SHUTDOWNHW x

The following special notes apply to each of the general methodsimplemented by the data store component 150.

The following component types are valid for theXMC_DE_SYSTEM_CONNECT_CMPNT method on the data store component 150:

XMC_DE_CMPNT_TYPE_XMCDCACHE, which specifies a data cache 152;

XMC_DE_CMPNT_TYPE_XMCDC, which specifies a data collection component 140that is connected with events; and

XMC_DE_CMPNT_TYPE_XMCDO, which specifies a data transport component 162that is connected with events.

The following component types are valid for theXMC_DE_SYSTEM_DISCONNECT_CMPNT method as implemented by the data storecomponent 150:

XMC_DE_CMPNT_TYPE_XMCDCACHE, which specifies a data cache 152;

XMC_DE_CMPNT_TYPE_XMCDC, which specifies a data collection component 140that is connected with events; and

XMC_DE_CMPNT_TYPE_XMCDO, which specifies an XMC data output module 134that is connected with events.

The data store component 150 implements the general methods describedabove as indicated in the following table: Not Im- Im- ple- ple- ment-ment- Method ed ed XMC_DE_BROWSE_GET_COUNT x XMC_DE_BROWSE_GET_ITEMS xXMC_DE_DATA_PROCESS x XMC_DE_DATA_PROCESS_CONFIGURE x XMC_DE_DATA_READ xXMC_DE_DATA_READ_CONFIGURE x XMC_DE_DATA_WRITE x XMC_DE_EVENT_ENABLE xXMC_DE_EVENT_RECEIVE_DATA x XMC_DE_EVENT_RECEIVE_DATA_CONFIGURE xXMC_DE_EVENT_SUBSCRIBE x XMC_DE_EVENT_UNSUBSCRIBE xXMC_DE_SYSTEM_CONNECT_CMPNT x XMC_DE_SYSTEM_DISCONNECT_CMPNT xXMC_DE_SYSTEM_INITIALIZEHW x XMC_DE_SYSTEM_SHUTDOWNHW x

There are no special notes for the methods implemented by the data storecomponent 150.

The data output component 160 implements the general methods describedabove as indicated in the following table: Not Im- Im- ple- ple- ment-ment- Method ed ed XMC_DE_BROWSE_GET_COUNT x XMC_DE_BROWSE_GET_ITEMS xXMC_DE_DATA_PROCESS x XMC_DE_DATA_PROCESS_CONFIGURE x XMC_DE_DATA_READ xXMC_DE_DATA_READ_CONFIGURE x XMC_DE_DATA_WRITE x XMC_DE_EVENT_ENABLE xXMC_DE_EVENT_RECEIVE_DATA x XMC_DE_EVENT_RECEIVE_DATA_CONFIGURE xXMC_DE_EVENT_SUBSCRIBE x XMC_DE_EVENT_UNSUBSCRIBE xXMC_DE_SYSTEM_CONNECT_CMPNT x XMC_DE_SYSTEM_DISCONNECT_CMPNT xXMC_DE_SYSTEM_INITIALIZEHW x XMC_DE_SYSTEM_SHUTDOWNHW x

The following special notes methods apply to the general methods asimplemented by the data output component 160.

The following component types are valid for theXMC_DE_SYSTEM_CONNECT_CMPNT as implemented by the data output component160:

XMC_DE_CMPNT_TYPE_XMCINFERENCE, which specifies an inference enginecomponent 166;

XMC_DE_CMPNT_TYPE_XMCDFORMAT, which specifies a data formatter component164; and

XMC_DE_CMPNT_TYPE_XMCDTRANSPORT, which specifies a data transportcomponent 162.

The following component types are valid for theXMC_DE_SYSTEM_DISCONNECT_CMPNT as implemented by the data outputcomponent 160:

XMC_DE_CMPNT_TYPE_XMCINFERENCE, which specifies an inference enginecomponent 166.

XMC_DE_CMPNT_TYPE_XMCDFORMAT, which specifies an data formattercomponent 164.

XMC_DE_CMPNT_TYPE_XMCDTRANSPORT, which specifies an data transportcomponent 162.

The inference engine component 166 implements the general methodsdescribed above as indicated in the following table: Not Im- Im- ple-ple- ment- ment- Method ed ed XMC_DE_BROWSE_GET_COUNT xXMC_DE_BROWSE_GET_ITEMS x XMC_DE_DATA_PROCESS xXMC_DE_DATA_PROCESS_CONFIGURE x XMC_DE_DATA_READ xXMC_DE_DATA_READ_CONFIGURE x XMC_DE_DATA_WRITE x XMC_DE_EVENT_ENABLE xXMC_DE_EVENT_RECEIVE_DATA x XMC_DE_EVENT_RECEIVE_DATA_CONFIGURE xXMC_DE_EVENT_SUBSCRIBE x XMC_DE_EVENT_UNSUBSCRIBE xXMC_DE_SYSTEM_CONNECT_CMPNT x XMC_DE_SYSTEM_DISCONNECT_CMPNT xXMC_DE_SYSTEM_INITIALIZEHW x XMC_DE_SYSTEM_SHUTDOWNHW x

There are no special notes for the methods implemented by the inferenceengine component 166.

The data formatter component 164 implements the general methodsdescribed above as indicated in the following table: Not Im- Im- ple-ple- ment- ment- Method ed ed XMC_DE_BROWSE_GET_COUNT xXMC_DE_BROWSE_GET_ITEMS x XMC_DE_DATA_PROCESS xXMC_DE_DATA_PROCESS_CONFIGURE x XMC_DE_DATA_READ xXMC_DE_DATA_READ_CONFIGURE x XMC_DE_DATA_WRITE x XMC_DE_EVENT_ENABLE xXMC_DE_EVENT_RECEIVE_DATA x XMC_DE_EVENT_RECEIVE_DATA_CONFIGURE xXMC_DE_EVENT_SUBSCRIBE x XMC_DE_EVENT_UNSUBSCRIBE xXMC_DE_SYSTEM_CONNECT_CMPNT x XMC_DE_SYSTEM_DISCONNECT_CMPNT xXMC_DE_SYSTEM_INITIALIZEHW x XMC_DE_SYSTEM_SHUTDOWNHW x

There are no special notes for the methods implemented by the dataformatter component 164.

The data transport component 162 implements the general methodsdescribed above as indicated in the following table: Not Im- Im- ple-ple- ment- ment- Method ed ed XMC_DE_BROWSE_GET_COUNT xXMC_DE_BROWSE_GET_ITEMS x XMC_DE_DATA_PROCESS xXMC_DE_DATA_PROCESS_CONFIGURE x XMC_DE_DATA_READ xXMC_DE_DATA_READ_CONFIGURE x XMC_DE_DATA_WRITE x XMC_DE_EVENT_ENABLE xXMC_DE_EVENT_RECEIVE_DATA x XMC_DE_EVENT_RECEIVE_DATA_CONFIGURE xXMC_DE_EVENT_SUBSCRIBE x XMC_DE_EVENT_UNSUBSCRIBE xXMC_DE_SYSTEM_CONNECT_CMPNT x XMC_DE_SYSTEM_DISCONNECT_CMPNT xXMC_DE_SYSTEM_INITIALIZEHW x XMC_DE_SYSTEM_SHUTDOWNHW x

There are no special notes for the methods implemented by the datatransport component 162.

All methods exposed by each component in the example data routing system120 use a standard parameter set to describe data used to set and queryproperties as well as to invoke methods. The standard parameters are inthe following format:

pObj->InvokeMethod(LPXMC_PARAM_DATA rgData, DWORD dwcount);

Each element in the rgData array corresponds to a parameter, with thefirst element in the array corresponding to the first parameter.

The XMC_PARAM_DATA structure can contain either a numerical or a stringvalue and is defined as follows: typedef struct tagXMC_PARAM_DATA { LNG_PARAM_DATATYPE adt;  union  {   double df;   LPTSTR psz;  };}XMC_PARAM_DATA;

The ‘adf’ member of the XMC_PARAM_DATA structure describes the datacontained within the XMC_PARAM_DATA structure. The values are describedbelow: LNG_PARAM_DATATYPE Description LNG_ADT_NUMBER Use this value whenpassing a numerical value via the ‘adt’ member of the XMC_PARAM_DATAstructure. LNG_ADT_STAT_STRING Use this value when passing a staticstring value via the ‘psz’ member of the XMC_PARAM_DATA structure.Static strings do not need to be freed from memory. LNG_ADT_MEM_STRINGUse this value when passing a string value via the ‘psz’ member of theXMC_PARAM_DATA structure. LNG_ADT_MEM_STRING denotes that the stringmust be freed from memory during cleanup. LNG_ADT_NOP This value is usedto ignore items within the XMC_PARAM_DATA array. When specifies, thisparameter is not used.

When querying and setting boolean TRUE/FALSE values, any non-zero valueis considered TRUE, whereas a zero value is considered FALSE.

As described herein, the data routing system 120 is designed to collectdata from one or more data origins 122, perform some decision logic onthe data collected, and then send the data to one or more datadestinations 124 based on the outcome of the decision logic run on thedata inputs.

For example, data inputs may be data items describing the current stateof a machine tool, automobile or other machine as shown in FIG. 20. Thedecision logic would then use these data inputs to determine the overallhealth or efficiency of the machine. Data outputs would be used todescribe the machine's health or efficiency. This model thus operates asa data ‘router’, where data is routed from one or more input to one ormore output based on the decision logic run on the inputs. Typicallythis model is used to ‘cook-down’ a wide array of data inputs that arevery detailed in nature, to a more general set of data outputs thatdescribe the overall performance, state or behavior of the machine.

However, this overall model can easily run in the reverse where the datainput and output roles are reversed. In such an example, as generallyshown in FIG. 21 the inputs are general in nature and then decisionlogic is used to determine the specific detailed outputs necessary tocarry out a given behavior or action or to enter a given state.

For example using the latter model, a general input to a machine toolmay be something like ‘mill a pocket’ at a certain point. The decisionlogic in turn would then figure out all of the necessary tools,feedrate, spindlerate and moves necessary to create the pocket on thepart. Once determined, the decision logic would ‘output’ the values as aset of detailed output values such as the specific feedrate, thespecific spindlerate and the move profile to use. Each output would thenbe sent directly to the machine controller hardware that actually ranthe servo algorithms to move the tool and cut the part.

In another example, general inputs may be used to direct the path forwhich a car, airplane, ship or other mobile machine moved to a givendestination. For example, a general set of instructions would make upthe inputs such as follow road ‘x’ to intersection ‘y’, turn left atintersection ‘y’, drive to house ‘b’. The decision logic in this examplewould then be used to determine how to drive along road ‘x’ (making sureto track the right hand side of the road by following the yellow orwhite lines painted on the road), decision logic would determine whenthe intersection sought had been reached, how to negotiate the turn anddrive to house ‘b’. When making each of these decisions the decisionlogic system would more than likely require additional, more detailedinput from sensor systems. Each output could then take a more detailedform such as the speed that the car or other mobile should drive, andthe steering adjustments needed to track and follow the desired path onthe selected road.

One of ordinary skill in the art will recognize that he presentinvention may be embodied in forms other than those described above. Thescope of the invention should be determined by the following claims andnot the foregoing detailed description of the example embodiments.

1. A data routing system for collecting data from at least one dataorigin and distributing data to at least one data destination,comprising: a data input module operatively connected to the at leastone data origin, where the data input module is configured to collectdata from the at least one data origin; and a data output moduleoperatively connected to the data input module and to the at least onedata destination, where the data collection component is configured todistribute the data collected by the data input module to the at leastone data destination.
 2. A data routing system as recited in claim 1, inwhich: the data collected by the data input module is distributed to aplurality of data destinations; and the data output module comprisesdecision logic that determines how data collected by the data inputmodule is distributed to the plurality of data destinations.
 3. A datarouting system as recited in claim 2, in which the decision logicdetermines: what data is distributed to which of the plurality of datadestinations; the format of the data to be distributed to each of theplurality of data destinations; and the method of transporting data toeach of the plurality of data destinations.
 4. A data routing system asrecited in claim 1, in which the data output module comprises: aninference engine component for determining how data is distributed tothe at least one data destination; and a data output component forreceiving data from the data input module and distributing the data tothe at least one data destination based on the determination made by theinference engine.
 5. A data routing system as recited in claim 2, inwhich the data output module comprises: an inference engine componentfor determining how data is distributed to the plurality of datadestinations; and a data output component for receiving data from thedata input module and distributing the data to the plurality of datadestinations based on the determination made by the inference engine. 6.A data routing system as recited in claim 5, in which the inferenceengine maps data to one or more of the data destinations based on logicrules.
 7. A data routing system as recited in claim 6, in which thelogic rules determine: what data is distributed to which of theplurality of data destinations; the format of the data to be distributedto each of the plurality of data destinations; and the method oftransporting data to each of the plurality of data destinations.
 8. Adata routing system as recited in claim 5, in which the inference enginecomponent comprises at least one computer logic system selected from thegroup of computer logic systems consisting of artificial intelligencesystems, fuzzy logic algorithm systems, neural network pattern matchingsystems, genetic algorithm systems, expert logic systems, and patternmatching systems.
 9. A data routing system as recited in claim 5, inwhich the data output module further comprises at least one datatransport component for transporting data to at least one of the datadestinations.
 10. A data routing system as recited in claim 5, in whichthe data output module further comprises at least one data formaftercomponent for formatting data distributed to at least one of the datadestinations.
 11. A data routing system as recited in claim 1, in whichthe data input module comprises: at least one data source componentassociated with at least one data origin; and a data collectioncomponent for controlling the at least one data source to collected datafrom the at least one data origin associated therewith.
 12. A datarouting system as recited in claim 1, further comprising a data cachemodule for storing data collected by the data input module, where datastored by the data cache module is accessible by the output data module.13. A data routing system as recited in claim 1, in which the data cachemodule comprises: at least one data cache component associated with adata storage system; and a data store component for receiving data fromthe data input module, storing the data in the data storage systemassociated with the at least one data cache component, retrieving datafrom the data storage system associated with the at least one data cachecomponent, and delivering data to the data output module.
 14. A datarouting system as recited in claim 2, in which decision logic furtherdetermines how data requests generated by the data destinations aredistributed to the plurality of data origins.
 15. A method of routingdata collected from a plurality of data origins to a plurality of datadestinations, comprising the steps of: collecting data from theplurality of data origins; determining how the collected data is to bedistributed to the plurality of data destinations based on decisionlogic; and distributing the collected data to the plurality of datadestinations.
 16. A data routing method as recited in claim 15, in whichthe decision logic determines: what data is distributed to which of theplurality of data destinations; the format of the data to be distributedto each of the plurality of data destinations; and the method oftransporting data to each of the plurality of data destinations.
 17. Adata routing method as recited in claim 15, in which the decision logicmaps collected data to one or more of the data destinations based onlogic rules.
 18. A data routing method as recited in claim 15, furthercomprising the step of transporting the collected data to at least oneof the data destinations based on the decision logic.
 19. A data routingmethod as recited in claim 15, further comprising the step of formattingthe collected data as appropriate for at least one of the datadestinations based on the decision logic.
 20. A data routing method asrecited in claim 15, further comprising the steps of: providing at leastone data source component associated with at least one data origin; andcontrolling the at least one data source to collect data from the atleast one data origin associated therewith.
 21. A data routing method asrecited in claim 15, further comprising the step of storing collecteddata before the collected data is distributed to the plurality of datadestinations.
 22. A data routing system for collecting data from aplurality of data origins and distributing data to a plurality of datadestinations, comprising: a data input module operatively connected tothe at least one data origin, where the data input module comprises atleast one data source component associated with at least one dataorigin, and a data collection component for controlling the at least onedata source to collected data from the at least one data originassociated therewith; a data cache module for storing data collected bythe data input module, where the data cache module comprises at leastone data cache component associated with a data storage system, and adata store component for receiving data from the data input module,storing the data in the data storage system associated with the at leastone data cache component, retrieving data from the data storage systemassociated with the at least one data cache component, and deliveringdata to the data output module; and a data output module operativelyconnected to the data input module and to the at least one datadestination, where data output module comprises an inference enginecomponent for determining how data is distributed to the at least onedata destination, and a data output component for receiving data fromthe data input module and distributing the data to the at least one datadestination based on the determination made by the inference engine, atleast one data transport component for controlling the transportation ofdata to at least one of the data destinations, at least one dataformatter component for formatting data distributed to at least one ofthe data destinations.